package object03;

public class Demo {
    public static void main(String[] args) {
        Person p1 = new Person("谢霆锋", 30);
        Person p2 = new Person("张三丰", 40);
        Person p3 = new Person("老李", 25);

        boolean b1 = p1.equals(p2);
        boolean b2 = p1.equals(p1);
        boolean b3 = p1.equals(p3);

        System.out.println(b1 + "   " + b2 + "    " + b3);
    }
}
/**
 *    public boolean equals(Object obj) {
 *         return (this == obj);
 *     }
 *  ==比较运算符:
 *    a.比较基本数据类型,比较两个基本类型的数值
 *      int i=3;
 *      int j=11;
 *      i==j //false
 *    b.比较引用数据类型,比较的是两个引用中存储的地址值(内存地址生成的哈希值)
 *
 * p1.equals(p2):
 *    this = p1 = new Person("谢霆锋", 30);
 *    obj  = p2 = new Person("佟大为", 29);
 *    this == obj:
 *       由于this指向new Person("谢霆锋", 30),obj指向另外一个new Person("佟大为", 29)
 *       因此this和obj分别指向的对象内存地址值不同(不是同一个对象),所以返回false
 *
 * p1.equals(p1):
 *     this = p1 = new Person("谢霆锋", 30);
 *     obj  = p1 = new Person("谢霆锋", 30);
 *     由于this和obj都指向同一个对象new Person("谢霆锋", 30),内存地址值相同,因此返回true
 *
 * p1.equals(p3):
 *    this= p1 = new Person("谢霆锋", 30);
 *    obj = p3 = new Person("谢霆锋", 30);
 *    虽然两个Person都是谢霆锋,30,但是 this指向的p1是一个对象 ,而 obj指向的p3是另外一个对象
 *    由于两个不同的对象,内存地址值不同,因此返回false
 */
